'''
高级特性
    |-切片

切片：取指定索引范围的操作 (例如：字符串的截取操作)

小结
    很多编程语言中，针对字符串提供了很多各种截取函数（例如，substring），其实目的就是对字符串切片。
    Python没有针对字符串的截取函数，只需要切片一个操作就可以完成，非常简单

练习
    利用切片操作，实现一个trim()函数，去除字符串首尾的空格，注意不要调用str的strip()方法：
'''

def lenIsZero(s):
    flag = False
    if len(s) == 0:
        flag = True
    return flag

def trim(s):

    if lenIsZero(s):
        return s

    # 前端的空字符串处理
    while ' ' == s[0]:
        s = s[1:]
        if lenIsZero(s):
            return s

    # 后端的空字符串处理
    while ' ' == s[-1]:
        s = s[:-1]
        if lenIsZero(s):
            return s
    return s

if __name__ == '__main__':
    # L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    # # L[0:3]表示，从索引0开始取，直到索引3为止，但不包括索引3。即索引0，1，2，正好是3个元素 即，[0,3)
    # print(L[0:3])

    L = list(range(100))

    # 前10个
    print(L[:10])

    # 后10个
    print(L[-10:])

    # 前11-20个
    print(L[10:20])

    # 前10个数，每两个取一个
    print(L[:10:2])

    # 所有数，每5个取一个
    print(L[::5])

    # 甚至什么都不写，只写[:]就可以原样复制一个list
    print(L[:])

    # tuple也是一种list，唯一区别是tuple不可变。因此，tuple也可以用切片操作，只是操作的结果仍是tuple
    myTuple = (0, 1, 2, 3, 4, 5)
    print(myTuple[:3])

    # 字符串'xxx'也可以看成是一种list，每个元素就是一个字符。因此，字符串也可以用切片操作，只是操作结果仍是字符串
    myStr = 'ABCDEFGHIJKLMN'
    print(myStr[:6])
    print(myStr[-1])
    print(myStr[:-1])

    # 练习测试
    if trim('hello  ') != 'hello':
        print('测试失败!')
    elif trim('  hello') != 'hello':
        print('测试失败!')
    elif trim('  hello  ') != 'hello':
        print('测试失败!')
    elif trim('  hello  world  ') != 'hello  world':
        print('测试失败!')
    elif trim('') != '':
        print('测试失败!')
    elif trim('    ') != '':
        print('测试失败!')
    else:
        print('测试成功!')

